package com.obelisco.modelo.dao.hibernate;

import java.io.Serializable;
import java.util.List;
import java.util.ResourceBundle;

import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.dao.IOperacionDAO;
import com.obelisco.modelo.data.Operacion;

public class OperacionDAO extends HibernateDAO<Operacion>  implements IOperacionDAO {

	@Override
	public Operacion findByPK(Serializable clave) {
    	Operacion data = (Operacion) getHibernateTemplate().load(Operacion.class,clave);
		return data.getEstado().equals("B") ? null : data;        		
	}
 
	@SuppressWarnings("unchecked")
	@Override
	public List<Operacion> loadAll() {
		return getHibernateTemplate().find("from Operacion operacion where operacion.estado != 'B'");
	}

	@Override
	public void delete(Operacion operacion) {
		if (operacion.getDesistema().booleanValue())
			throw new ObeliscoException("NO se puede eliminar una Operacion de Sistema");
		getHibernateTemplate().delete(operacion);
	}
	
	ClassValidator<Operacion> operacionValidator = new ClassValidator<Operacion>(
			Operacion.class,ResourceBundle.getBundle("com.obelisco.modelo.data.hibernate-validator"));
	
	public void validate(Operacion objeto) {

		StringBuffer errores = new StringBuffer();
		for (InvalidValue value : operacionValidator.getInvalidValues(objeto))
			errores.append(value.getPropertyName() + " - " + value.getMessage() + "<br/>");

		if (errores.length() > 0)
			throw new ObeliscoException(errores.toString());
	}

	@Override
	public void save(Operacion objeto) {
		validate(objeto);
		getHibernateTemplate().saveOrUpdate(objeto);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List findByProperty(String propertyName, Object value) {
		String queryString = "from Operacion as modelo where modelo."
				+ propertyName + "= ?";
		return getHibernateTemplate().find(queryString, value);
	}

}
